Spring JDBC-এ Named Parameters এবং SqlParameterSource ব্যবহার করা হয় SQL কোয়েরি বা আপডেট অপারেশনে প্যারামিটার পাঠানোর জন্য। এটি প্যারামিটারাইজড কোয়েরির ব্যবহারে অনেক সুবিধা প্রদান করে এবং কোডকে আরও পরিষ্কার, পাঠযোগ্য এবং নিরাপদ করে তোলে।
Named Parameters
Named Parameters হল SQL কোয়েরির মধ্যে প্যারামিটারকে নাম দিয়ে উল্লেখ করার পদ্ধতি। সাধারণত, JDBC এ প্যারামিটার বসানোর জন্য ? ব্যবহার করা হয়, কিন্তু Named Parameters ব্যবহার করলে প্যারামিটারগুলোকে নাম দিয়ে উল্লেখ করা যায়, যা কোডের পাঠযোগ্যতা বৃদ্ধি করে এবং SQL ইনজেকশনের ঝুঁকি কমায়।
Spring JDBC-এ NamedParameterJdbcTemplate ব্যবহার করা হয় Named Parameters এর সাথে কাজ করতে।
SqlParameterSource
SqlParameterSource একটি ইন্টারফেস যা প্যারামিটার মানগুলি সরবরাহ করে। NamedParameterJdbcTemplate ক্লাস এই ইন্টারফেসটি ব্যবহার করে নামকৃত প্যারামিটারগুলোর মানগুলিকে ম্যানেজ করে।
Spring JDBC-এ NamedParameterJdbcTemplate এবং SqlParameterSource ব্যবহার করার উদাহরণ নিচে দেখানো হলো।
উদাহরণ ১: Named Parameters এর ব্যবহার
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserRepository {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// Method to get users by age range using named parameters
public List<User> getUsersByAgeRange(int minAge, int maxAge) {
String sql = "SELECT * FROM users WHERE age BETWEEN :minAge AND :maxAge";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("minAge", minAge);
parameters.addValue("maxAge", maxAge);
return namedParameterJdbcTemplate.query(sql, parameters, new UserRowMapper());
}
}
এখানে:
- SQL কোয়েরিতে
:minAgeএবং:maxAgeনামে প্যারামিটার ব্যবহার করা হয়েছে। MapSqlParameterSourceব্যবহার করে প্যারামিটারগুলোর মান (যেমনminAgeএবংmaxAge) সেট করা হয়েছে।NamedParameterJdbcTemplateব্যবহার করে কোয়েরি চালানো হয়েছে, যা নামকৃত প্যারামিটারগুলি সমর্থন করে।
উদাহরণ ২: SqlParameterSource এর ব্যবহার
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// Method to update user details using named parameters
public int updateUser(int userId, String userName, String email) {
String sql = "UPDATE users SET user_name = :userName, email = :email WHERE user_id = :userId";
SqlParameterSource parameters = new MapSqlParameterSource()
.addValue("userId", userId)
.addValue("userName", userName)
.addValue("email", email);
return namedParameterJdbcTemplate.update(sql, parameters);
}
}
এখানে:
- SQL কোয়েরিতে
:userId,:userName, এবং:emailনামে প্যারামিটার ব্যবহার করা হয়েছে। MapSqlParameterSourceএর মাধ্যমে SQL প্যারামিটারগুলো সেট করা হয়েছে।namedParameterJdbcTemplate.update()মেথডটি ব্যবহার করে SQL কোয়েরি আপডেট করা হয়েছে।
NamedParameterJdbcTemplate এবং SqlParameterSource এর কার্যকারিতা
- NamedParameterJdbcTemplate:
- এটি Spring JDBC টেমপ্লেটের একটি বিশেষায়িত সংস্করণ যা নামকৃত প্যারামিটারগুলির সাথে কাজ করে।
- এটি
JdbcTemplateএর মতো কাজ করে, তবে এটি প্যারামিটারগুলির নাম ব্যবহার করে SQL কোয়েরি বা আপডেট অপারেশন পরিচালনা করতে সহায়তা করে।
- MapSqlParameterSource:
- এটি
SqlParameterSourceইন্টারফেসের একটি ইমপ্লিমেন্টেশন। এটি প্যারামিটার নাম এবং তাদের মান সংরক্ষণ করতে ব্যবহৃত হয়। - এটি
addValue()মেথডের মাধ্যমে প্যারামিটার যোগ করতে সহায়তা করে, যেখানে প্যারামিটার নাম এবং মান নির্ধারণ করা হয়।
- এটি
- SQL Injection থেকে নিরাপত্তা:
- Named Parameters ব্যবহার করার অন্যতম সুবিধা হলো এটি SQL ইনজেকশনের আক্রমণ থেকে সুরক্ষা প্রদান করে, কারণ প্যারামিটারগুলি নামের মাধ্যমে নির্ধারণ করা হয় এবং এটি স্বয়ংক্রিয়ভাবে সঠিকভাবে escaped হয়ে যায়।
উপসংহার
- Named Parameters ব্যবহার করলে SQL কোড আরো পরিষ্কার এবং পাঠযোগ্য হয়, এবং এটি SQL ইনজেকশন রোধে সহায়তা করে।
- SqlParameterSource (যেমন
MapSqlParameterSource) প্যারামিটারগুলোর মান রাখার জন্য একটি ইন্টারফেস প্রদান করে এবংNamedParameterJdbcTemplateএর সাথে খুব সহজে ইন্টিগ্রেট করা যায়।
এভাবে Spring JDBC-এ Named Parameters এবং SqlParameterSource ব্যবহার করা কোডকে আরো মেনটেনেবল এবং নিরাপদ করে তোলে।
Read more